Sub DoSql_Recordset()
    '以下是第一步，后期绑定ADO，并创建rst记录集
    '
    Dim cnn As Object, rst As Object
    Dim strPath As String, str_cnn As String, strSQL As String
    Dim i As Long
    Set cnn = CreateObject("adodb.connection")
    Set rst = CreateObject("adodb.Recordset")
    '以下是第二步，建立链接
    '
    strPath = ThisWorkbook.FullName
    If Application.Version < 12 Then
        str_cnn = "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & strPath
    Else
        str_cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & strPath
    End If
    cnn.Open str_cnn
    strSQL = "SELECT 姓名,成绩 FROM [Sheet1$] WHERE 成绩>=80"
    'Sql语句，查询Sheet1表成绩大于80……姓名和成绩的记录
    rst.Open strSQL, cnn, 1, 3
    'rst执行SQL语句，并将查询结果放入记录集
    '以下是第三步，编写并执行SQL
    
    '清空区域的值
    [d:e].ClearContents
    
    '利用fields属性获取所有字段名，fields包含了当前记录有关的所有字段,fields.count得到字段的数量
    '由于Fields.Count下标为0，又从0开始遍历，因此总数-1
    For i = 0 To rst.Fields.Count - 1
        '表头位置
        Cells(1, i + 4) = rst.Fields(i).name
    Next
    
    '粘贴在所在位置
    Range("d2").CopyFromRecordset rst
    
    '使用单元格对象的CopyFromRecordset方法将rst内容复制到D2单元格为左上角的单元格区域
    '以上是第四步，将SQL查询结果和字段名称写入表格指定区域
    '关闭记录集rst
    rst.Close
    '关闭链接
    cnn.Close
    '释放内存
    Set rst = Nothing
    Set cnn = Nothing
    
End Sub
